package com.dmz.workflow.service;

import java.util.List;

import com.dmz.workflow.req.ListQuery;
import com.dmz.workflow.vo.IntermediateNodeVo;
import com.dmz.workflow.vo.TaskListVo;
import com.echronos.commons.Result;
import com.echronos.workflow.vo.*;

public interface FlowableTaskService {

    /**
     * 转办任务
     */
    Result<?> assignTask(DelegateReq delegateReq);

    /**
     * 委派任务
     */
    Result<?> delegateTask(DelegateReq delegateReq);

    /**
     * 完成任务
     */
    Result<?> completeTask(CompleteReq completeReq);

    /**
     * 终止流程
     */
    Result<?> refuseTask(CompleteReq completeReq);

    /**
     * 终止流程
     */
    void repealTask(CompleteReq completeReq);

    /**
     * 查询可退回节点
     */
    List<IntermediateNodeVo> queryReachableBackNodes(String processInstanceId);

    /**
     * 退回任务
     */
    void backTask(BackReq backReq);

    /**
     * 任务已阅
     */
    void readTask(ReadReq readReq);

    /**
     * 加签
     */
    void addSignTask(AddSignReq addSignReq);

    /**
     * 获取已完成任务列表
     */
    Result<List<TaskListVo>> getTaskDone(ListQuery queryVo);

    /**
     * 获取待审批任务列表
     */
    Result<List<TaskListVo>> getToDoList(ListQuery queryVo);

    /**
     * 查询抄送给我的列表
     */
    Result<List<TaskListVo>> listCcToMe(ListQuery queryVo);

    /**
     * 统计待审批的数量
     * @return
     */
    Integer countToDoList();

    /**
     * 抄送列表的审批全标已读
     */
    void markAllRead();

    /**
     * 发送消息催办
     */
    void urgeToApprove(UrgeToApproveReq urgeToApprove);

    /**
     * 更新任务表单数据
     */
    void updateTaskFormData(TaskFormDataReq taskFormDataReq);
}